<?php 
namespace Admin\Controller;

class RoleController extends PublicController
{

	public function __construct()
	{
		parent::__construct();
		$this->assign('title','角色管理');
	}

	// 用户角色默认页
	public function index()
	{
		// 得到分页查询条件
		$map = array();
		if (!empty($_GET['rolename'])) {
			$map['rolename'] = array('LIKE',"%{$_GET['rolename']}%");
		}
		foreach($map as $key=>$val) {
			$Page->parameter[$key] = urlencode($val);
		}

		// 执行查询和分页
		$role = M('role');
		$count = $role->where($map)->count();// 查询满足要求的总记录数
		$Page = new \Think\Page($count,5);// 实例化分页类 传入总记录数和每页显示的记录数(25)
		// 进行分页数据查询 注意limit方法的参数要使用Page类的属性
		$roledata = $role->where($map)->limit($Page->firstRow.','.$Page->listRows)->select();

		$show = $Page->show();// 分页显示输出
		// $this->assign('userlist',$list);// 赋值数据集
		$this->assign('page',$show);// 赋值分页输出

		$this->assign('roledata',$roledata);
		$this->assign('locat','角色列表');
		$this->display('Role/index');

	}

	// 加载添加角色页面
	public function add()
	{
		$this->assign('locat','添加角色');
		$this->display('Role/add');
	}

	// 执行添加角色操作
	public function insert()
	{
		$role = M('role');

		// 检测要添加的角色是否存在
		$where['rolename'] = $_POST['rolename'];
		if ($role->where($where)->find()) {
			$this->error('该角色已存在!');
			exit;
		}

		// 执行添加
		$role->create();
		$result = $role->add();
		if ($result) {
			$this->success('添加成功','index');
		} else {
			$this->error('添加失败...');
			exit;
		}
		
	}

	// 执行删除
	public function del()
	{
		$id = I('get.roleid');
		$role = M('role');
		$where['roleid'] = $id;
		$result = $role->where($where)->delete();
		if ($result) {
			$this->success('删除成功!');
		}else{
			$this->error('删除失败...');
			exit;
		}
	}

	// 编辑角色信息
	public function edit()
	{
		$id = I('get.roleid');
		$role = M('role');
		$where['roleid'] = $id;
		$roledata = $role->where($where)->find();
		$this->assign('locat','编辑角色信息');
		$this->assign('roledata',$roledata);
		$this->display('Role/edit');
	}

	// 保存修改
	public function update()
	{

		// 检测修改的角色名是否已经存在
		$roleid = I('post.roleid');
		$rolename = I('post.rolename');
		$map['rolename'] = array('eq',$rolename);
		$map['roleid'] = array('neq',$roleid);
		$role = M('role');
		if ($role->where($map)->find()) {
			$this->error('修改的角色名已存在...');
			exit;
		}

		// 执行修改
		$role->create();
		$result = $role->save();
		if($result == 1){
			$this->success('修改成功!','index');
		}else if($result === false){
			$this->error('修改失败...');
			exit;
		}else{
			$this->error('您没有进行任何修改!');
			exit;
		}

	}

	// 给角色分配权限
	public function role_node()
	{
		// 查找当前角色信息
		$role = M('role');
		$where['roleid'] = $_GET['roleid'];
		$rolelist = $role->where($where)->find();
		$this->assign('rolelist',$rolelist);

		// 查询当前角色的权限
		$role_node = M('role_node');
		$map['roleid'] = $_GET['roleid'];
		$role_node_data = $role_node->where($map)->getField('nodeid',true);
		$this->assign('role_node',$role_node_data);

		// 查询所有权限
		$node = M('node');
		$nodelist = $node->select();
		$this->assign('locat','角色分配权限');
		$this->assign('nodelist',$nodelist);
		$this->display('Node/nodelist');
	}

	// 保存权限修改结果
	public function save_role_node()
	{
		if (empty($_POST)) {
			$this->error('请至少选择一个节点!');
			exit;
		}

		$role_node = M('role_node');
		$where['roleid'] = $_GET['roleid'];

		// 删除角色关系表中当前角色的所有数据,重新添加,
		// 因为该表是没有主键的不能执行更新!!!
		$role_node->where($where)->delete();

		// 重新组合要添加进role_node 表中的数据,并执行添加
		foreach ($_POST as $k => $v) {
			$data['roleid'] = $_GET['roleid'];
			$data['nodeid'] = $v;
			$role_node->data($data)->add();
		}
		
		$this->success('分配成功!',U('Role/index'));
	}
}